package com.itheima.d1_commun;

//目标：了解线程间通信的实现方式
public class Demo01 {
    public static void main(String[] args) {
        /**
         * 等待和唤醒方法：
         *      wait()：让当前线程等待并释放所占锁，直到另一个线程调用notify()方法或 notifyAll()方法
         *      notify()：唤醒正在等待的单个线程
         *      notifyAll()：唤醒正在等待的所有线程
         *
         * 注意：上述方法应该使用当前同步锁对象进行调用
         *
         * 需求：利用线程间通信模拟打电话过程，用两个线程分别模拟打电话和接听电话
         *      其中小明线程负责打电话，小红线程负责接听电话
         *      电话只有打出才能被接听，电话被接听之后才可以继续打出电话
         *      这就需要让小明线程在打电话的时候知道电话是否被接听过
         *      小红线程接听电话的时候就需要知道电话是否被打出
         *      用一个Phone对象作为两个线程通信的标记，根据Phone对象的属性值，决定是否接听还是打出
         */
        //1.分别定义两个线程（小明、小红），分别负责打电话和接听电话

        //2.创建一个电话对象，作为共享资源
        Phone phone = new Phone();

        //3.创建线程对象，持有电话，完成各自的业务逻辑
        CallThread callThread = new CallThread(phone);
        ReceiveThread receiveThread = new ReceiveThread(phone);

        //4.开启线程
        callThread.start();
        receiveThread.start();
    }
}